In [1]:
import string
import copy
import scipy
import Tkinter, tkFileDialog
import numpy as np
import pandas as pd
from scipy.spatial.distance import cdist
import matplotlib.pyplot as plt
import os
import sys
import cPickle
import scipy.io as sio
import matplotlib.units
sys.path.append(os.path.abspath("C:\Users\Scherer Lab E\Documents\GitHub\Python_Data_Analysis"))
import common_functions as cf
import half_nanoplate_functions as hnf
import matplotlib_helper_functions as mplhf
%matplotlib inline
C:\Users\Scherer Lab E\Anaconda2\envs\170112\lib\site-packages\skimage\viewer\utils\core.py:10: UserWarning: Recommended matplotlib backend is `Agg` for full skimage.viewer functionality.
  warn("Recommended matplotlib backend is `Agg` for full "
In [2]:
os.chdir("C:\Users\Scherer Lab E\Box Sync\Passing\Figures and Data\Data")
In [3]:
#matplotlib.rcParams['font.family'] = 'Vera'
matplotlib.rcParams['figure.dpi'] = 200.0
#matplotlib.rcParams['axes.labelsize'] = 15
#matplotlib.rcParams['axes.titlesize'] = 18
#matplotlib.rcParams['xtick.labelsize'] = 'large'
#matplotlib.rcParams['ytick.labelsize'] = 'large'

matplotlib.rcParams['mathtext.fontset'] = 'dejavusans'
matplotlib.rcParams['font.family'] = 'sans-serif'
matplotlib.rcParams['font.sans-serif'] = 'stixsans'
matplotlib.rcParams['legend.handletextpad'] = -0.5
matplotlib.rcParams['legend.numpoints'] = 1
matplotlib.rcParams['legend.scatterpoints'] = 1
matplotlib.rcParams['legend.borderaxespad'] = 0.2
matplotlib.rcParams['legend.fontsize'] = 'small'
matplotlib.rcParams['xtick.labelsize'] = 'small'
matplotlib.rcParams['ytick.labelsize'] = 'small'
matplotlib.rcParams['axes.labelpad'] = 0.5
#matplotlib.rcParams['mathtext.default'] = 'regular'
#matplotlib.rcParams['font.family'] = 'serif'
#matplotlib.rcParams['font.serif'] = 'Times'

#matplotlib.rcParams['text.usetex'] = True
#matplotlib.rcParams['text.latex.unicode'] = True
#matplotlib.rc('text.latex', preamble=r'\usepackage{cmbright}')
matplotlib.rc('text.latex', preamble=[r'\usepackage{DejaVuSans}',
                                      r'\renewcommand*\familydefault{\sfdefault}',
                                     r'\usepackage[T1]{fontenc}',
                                     r'\usepackage{amsmath}'])
In [4]:
# For Matplotlib 2.0
matplotlib.rcParams['xtick.direction'] = 'in'
matplotlib.rcParams['ytick.direction'] = 'in'
matplotlib.rcParams['xtick.top'] = True
matplotlib.rcParams['ytick.right'] = True

Figure 1

In [56]:
# Get DataFrame that corresponds to image

store = pd.HDFStore("K:\Pat's_Projects\ParticleTrajectoryData\passing_event_data_trackpy_refined.h5", mode='r')
df = store.get("Exp06031401/Mov_06031432")
store.close()
In [57]:
def add_four_polar_coords(ax, size=None):
    """A helper function that adds 0pi, pi/2, pi, and 3pi/2 axis labels 
    on the inside of an axis following the unit circle.
    
    :param ax: A mpl.axes object you want to add polar labels to
    """
    if size == None:
        size = 'large'
    # Add the polar labels
    ax.text(0.955, 0.5, '$\mathbf{\mathregular{0}}$', fontdict=dict(color='white', size=size),
         weight='extra bold', transform=ax.transAxes, va='center', ha='right')
    ax.text(0.5, 0.97, '$\mathbf{\pi/\mathregular{2}}$', fontdict=dict(color='white', size=size),
             weight='extra bold', transform=ax.transAxes, va='top', ha='center')
    ax.text(0.045, 0.5, '$\mathbf{\pi}$', fontdict=dict(color='white', size=size),
             weight='extra bold', transform=ax.transAxes, va='center', ha='left')
    ax.text(0.5, 0.03, '$\mathbf{\mathregular{3}\pi/\mathregular{2}}$', fontdict=dict(color='white', size=size),
             weight='extra bold', transform=ax.transAxes, va='bottom', ha='center')
    
    # Change ticks in graph
    xticklines = ax.get_xticklines()
    yticklines = ax.get_yticklines()
    
    xcenter = len(xticklines)/2
    ycenter = len(yticklines)/2
    
    xticklines[xcenter].set(color='white', markeredgewidth=2, markersize=5, zorder=0)
    xticklines[xcenter-1].set(color='white', markeredgewidth=2, markersize=5)
    yticklines[ycenter].set(color='white', markeredgewidth=2, markersize=5)
    yticklines[ycenter-1].set(color='white', markeredgewidth=2, markersize=5)
    
In [58]:
def high_res_points(x, y, factor=10):
    new_x = []
    new_y = []
    for i in range(len(x)-1):
        m = (y[i+1] - y[i]) / (x[i+1] - x[i])
        b = y[i] - m*x[i]
        calc_x = np.linspace(x[i], x[i+1], factor)
        new_x += list(calc_x[:-1])
        new_y += list(calc_x[:-1]*m + b)
        last_x = x[i+1]
        last_y = y[i+1]
    new_x.append(last_x)
    new_y.append(last_y)
    return np.asarray(new_x), np.asarray(new_y)
In [82]:
import matplotlib.gridspec as gridspec

img = plt.imread("../particle pass example Mov_06031432_frame_2911_8_bit.tif")

experiment_info = plt.figure(figsize=(4, 2.4))

gs1 = gridspec.GridSpec(1,1)
gs1.update(left=0, right=.64, wspace=0, hspace=0)

# Plot full frame
ax1 = plt.subplot(gs1[0])
df_no_dupes = df.drop_duplicates(['frame', 'track id'])

x_cent, y_cent, r_mean = cf.least_sq_fit_circle(df_no_dupes)
plt.imshow(img, cmap='gray', vmin=56, vmax=192)
plt.axis('off')
theta_range = np.linspace(0, 2*np.pi, 1000)

df_frame = df_no_dupes[df_no_dupes.frame==2911]
df_frame = cf.y_axis_flip(df_frame, 240)
df_frame['theta'] = (df_frame['theta'] + 90)%360


part_1 = df_frame.iloc[-1]
part_2 = df_frame.iloc[-2]
part_3 = df_frame.iloc[-3]

def calc_final_pos_arc(start_deg, deg_shift, x_cent, y_cent, r_mean):
    final_deg = (start_deg + deg_shift)%360
    final_deg = final_deg*np.pi/180.0
    y_final = -r_mean*np.sin(final_deg) + y_cent
    x_final = r_mean*np.cos(final_deg) + x_cent
    return (x_final, y_final)

# ax1.annotate('', xy=calc_final_pos_arc(part_1.theta, 50, x_cent, 240 - y_cent, part_1.r), xycoords='data',
#            xytext=calc_final_pos_arc(part_1.theta, 3.5, x_cent, 240 - y_cent, part_1.r),
#            textcoords='data', arrowprops=dict(arrowstyle='simple,tail_width=0.25,head_width=0.7', connectionstyle="arc3,rad=0.2", facecolor='#FFDB00', edgecolor='#FFDB00'))
ax1.annotate('', xy=calc_final_pos_arc(part_2.theta, 50, x_cent, 240 - y_cent, part_2.r), xycoords='data',
           xytext=calc_final_pos_arc(part_2.theta, 3.5, x_cent, 240 - y_cent, part_2.r),
           textcoords='data', arrowprops=dict(arrowstyle='simple,tail_width=0.25,head_width=0.7', connectionstyle="arc3,rad=0.2", facecolor='#FFDB00', edgecolor='#FFDB00'))
ax1.annotate('', xy=calc_final_pos_arc(part_3.theta, 50, x_cent, 240 - y_cent, part_3.r), xycoords='data',
           xytext=calc_final_pos_arc(part_3.theta, 3.5, x_cent, 240 - y_cent, part_3.r),
           textcoords='data', arrowprops=dict(arrowstyle='simple,tail_width=0.25,head_width=0.7', connectionstyle="arc3,rad=0.2", facecolor='#FFDB00', edgecolor='#FFDB00'))

# Plot close-up and trajs

gs2 = gridspec.GridSpec(1,1)
gs2.update(left=0.64, right=1, bottom=0.6, top=1)

ax2 = plt.subplot(gs2[0])
plt.imshow(img, cmap='gray', vmin=56, vmax=192)
print df_no_dupes.query('frame == 2911')
track_1 = df_no_dupes[df_no_dupes['track id']==1]
track_2 = df_no_dupes[df_no_dupes['track id']==3]
track_1 = cf.y_axis_flip(track_1, 240)
track_2 = cf.y_axis_flip(track_2, 240)
track_1 = track_1.query('2911 <= frame < 2921')
track_2 = track_2.query('2911 <= frame < 2921')
# plt.plot(track_1['x pos'], track_1['y pos'])
# plt.plot(track_2['x pos'], track_2['y pos'])

# Plot track_1 traj
# get higher resolution data
xHiRes,yHiRes = high_res_points(track_1['x pos'].values,track_1['y pos'].values,20)
npointsHiRes = len(xHiRes)
cm = plt.get_cmap('autumn')
ax2.set_color_cycle([cm(1.*i/(npointsHiRes-1)) 
                     for i in range(npointsHiRes-1)])
for i in range(npointsHiRes-1):
    ax2.plot(xHiRes[i:i+2],yHiRes[i:i+2])
    
# Plot track_2 traj
# get higher resolution data
xHiRes,yHiRes = high_res_points(track_2['x pos'].values,track_2['y pos'].values,20)
npointsHiRes = len(xHiRes)
cm = plt.get_cmap('cool')
ax2.set_color_cycle([cm(1.*i/(npointsHiRes-1)) 
                     for i in range(npointsHiRes-1)])
for i in range(npointsHiRes-1):
    ax2.plot(xHiRes[i:i+2],yHiRes[i:i+2])

#print track_2
    
plt.axis('off')    
plt.ylim(205, 165)
plt.xlim(140, 190)
ax2.text(145, 190, '2', color='white')
ax2.text(160, 178, '1', color='white')
# Plot del_r del_theta traj

gs3 = gridspec.GridSpec(1,1)
gs3.update(left=0.65, right=1, bottom=0, top=0.6)

ax3 = plt.subplot(gs3[0])

# Convert track_2 del_r and del_theta units
track_2['del_r'] = track_2['del_r']*6.5/60/2
track_2['del_theta'] = track_2['del_theta']*np.pi/180

# get higher resolution data
xHiRes,yHiRes = high_res_points(track_2['del_theta'].values,track_2['del_r'].values,20)
npointsHiRes = len(xHiRes)
cm = plt.get_cmap('autumn')
# ax3.set_color_cycle([cm(1.*i/(npointsHiRes-1)) 
#                      for i in range(npointsHiRes-1)])
# for i in range(npointsHiRes-1):
#     ax3.plot(xHiRes[i:i+2],yHiRes[i:i+2])
    
ax3.plot(track_2.del_theta, track_2.del_r, 'C0')
ax3.plot(track_2.del_theta.iloc[0], track_2.del_r.iloc[0], 'C0o')
ax3.plot(track_2.del_theta.iloc[-1], track_2.del_r.iloc[-1], 'C0o')
ax3.text(-0.23, 0.1, '$t_0$')
ax3.text(0.18, 0.26, '$t_1$')

plt.xlabel(r'$\Delta \theta$ (radians)')
plt.ylabel(r'$\Delta$r ($\mathregular{\mu}$m)')
plt.xlim(-0.25, 0.25)
plt.ylim(-1.2, 1.2)
plt.xticks([-0.2, 0, 0.2])

mplhf.add_axes_label_inches(ax1, (0.068,0.065), 'a', color='white', fontsize=10)
mplhf.add_axes_label_inches(ax2, (0.068,0.065), 'b', color='white', fontsize=10)
mplhf.add_axes_label_inches(ax3, (0.068,0.065), 'c', fontsize=10)


ax1.xaxis.set_visible(False)
ax1.yaxis.set_visible(False)

ax2.xaxis.set_visible(False)
ax2.yaxis.set_visible(False)


gs1.tight_layout(experiment_info, pad=0, rect=[0, 0, 0.64, 1])
gs2.tight_layout(experiment_info, pad=0, rect=[0.63, .48, 1, 1])
gs3.tight_layout(experiment_info, pad=0, rect=[0.61, 0, 0.99, 0.47])
       frame  track id       x pos       y pos          r       theta  nn_num  \
15342   2911       5.0  204.344251  135.239151  86.071162  277.095922     1.0   
15344   2911       3.0  171.132686   59.445727  83.491499  218.698160     1.0   
15346   2911       1.0  155.072139   51.297659  81.733116  206.242321     1.0   

       nn_id    nn_dist  theta_nn_num  theta_nn_id  theta_nn_dist  del_theta  \
15342    3.0  82.750536           1.0          3.0      58.397761 -58.397761   
15344    1.0  18.009224           1.0          1.0      12.455840 -12.455840   
15346    3.0  18.009224           1.0          3.0      12.455840  12.455840   

          del_r  
15342 -2.579663  
15344 -1.758382  
15346  1.758382  
In [83]:
save_dir = "C:\Users\Scherer Lab E\Box Sync\Passing\Figures and Data\Figures"
experiment_info.savefig(save_dir+"\Fig_1.png", dpi=600)
save_dir = "C:\Users\Scherer Lab E\Box Sync\Passing\Figures and Data\Figures"
experiment_info.savefig(save_dir+"\Fig_1.pdf", dpi=800)

Figure 2

In [5]:
import cPickle

# From Ana_17051001
f = open("pass_event_r_deviation_closer_vs_further.pkl", "r")
further_del_r, closer_del_r = cPickle.load(f)
f.close()

# From Ana_17051001
f = open("pass_event_r_deviation.pkl", "r")
part_behind_r_dev, part_ahead_r_dev= cPickle.load(f)
f.close()

# From Ana_17050203
f = open("scatter_plots_giant_df.pkl", "r")
giant_df = cPickle.load(f)
f.close()

# From Ana_17053001
f = open("statistical_energy_of_barrier_del_theta_high_and_low_pass.pkl", "r")
high_pass_del_theta, low_pass_del_theta = cPickle.load(f)
f.close()

# # From Ana_17050204
# f = open("pass_event_del_r_theta.pkl", "r")
# all_theta, all_r = cPickle.load(f)
# f.close()

# store = pd.HDFStore("K:\Pat's_Projects\ParticleTrajectoryData\passing_event_data_trackpy_refined_extra.h5", mode='r')
In [52]:
hist_passing = plt.figure(figsize=(3.34646, 3.7))

um_conv = 6.5/60/2
radians_conv = np.pi/180.0
giant_df_finite = giant_df[np.isfinite(giant_df['del_theta'])]

ax1 = plt.subplot(211)
plt.hist(closer_del_r*um_conv, label='Particle closer\n to trap', alpha=0.5, range=[-1.08,1.08], bins=50, normed=True)
plt.hist(further_del_r*um_conv, label='Particle further\n from trap', alpha=0.5, range=[-1.08,1.08], bins=50, normed=True)
plt.ylabel('PD')
plt.xlabel(r'r deviation from trap ($\mathregular{\mu}$m)')
plt.legend(frameon=False, handletextpad=0.5)


ax2 = plt.subplot(212)
plt.hist(part_behind_r_dev*um_conv, label='Trailing\n Particle', alpha=0.5, range=[-1.08,1.08], bins=50, normed=True)
plt.hist(part_ahead_r_dev*um_conv, label='Leading\n Particle', alpha=0.5, range=[-1.08,1.08], bins=50, normed=True)
plt.ylabel('PD')
plt.xlabel(r'r deviation from trap ($\mathregular{\mu}$m)')
plt.legend(frameon=False, handletextpad=0.5)

#plt.hist2d(giant_df_finite['del_theta']*radians_conv, giant_df_finite['del_r']*um_conv, range=[(-10*radians_conv,10*radians_conv),(-25*um_conv, 25*um_conv)], bins=100)
# plt.ylabel(r'$\Delta$r ($\mathregular{\mu}$m)')
# plt.xlabel(r'$\Delta \theta$ (radians)')

# ax3 = plt.subplot(223)
# plt.hist2d(giant_df_finite['theta']*radians_conv, giant_df_finite['del_theta']*radians_conv, range=[(0,2*np.pi),(-5*radians_conv, 5*radians_conv)], bins=100)
# x_label = [r"0", r"$\frac{\pi}{\mathregular{2}}$", r"$\pi$", r"$\frac{\mathregular{3}\pi}{\mathregular{2}}$",   r"2$\pi$"]
# plt.xticks(np.array([0,0.5,1,1.5,2])*np.pi,x_label)
# plt.ylabel(r'$\Delta \theta$ (radians)')
# plt.xlabel(r'$\theta$')

mplhf.add_axes_label_inches(ax1, (0.068,0.065), 'a', fontsize=10)
mplhf.add_axes_label_inches(ax2, (0.068,0.065), 'b', fontsize=10)

plt.tight_layout(pad=0.65)
In [53]:
save_dir = "C:\Users\Scherer Lab E\Box Sync\Passing\Figures and Data\Figures"
hist_passing.savefig(save_dir+"\Fig_2.png", dpi=600)
save_dir = "C:\Users\Scherer Lab E\Box Sync\Passing\Figures and Data\Figures"
hist_passing.savefig(save_dir+"\Fig_2.pdf", dpi=800)

Theta Locations of Passing and Probability Surface for High and Low Passing Regions

In [97]:
# From Ana_17050203
f = open("scatter_plots_giant_df.pkl", "r")
giant_df = cPickle.load(f)
f.close()

# From Ana_17053001
f = open("statistical_energy_of_barrier_del_theta_high_and_low_pass.pkl", "r")
high_pass_del_theta, low_pass_del_theta = cPickle.load(f)
f.close()

store = pd.HDFStore("K:\Pat's_Projects\ParticleTrajectoryData\passing_event_data_trackpy_refined.h5", mode='r')
keys = store.index['key']
for key in keys
store.close()
In [98]:
radians_conv = np.pi/180.0

hist_passing_theta_del_theta = plt.figure(figsize=(3.34646, 3.7))

high_pass_theta_peaks = np.asarray([54, 230])
low_pass_theta_peaks = np.asarray([146, 336])
theta_region_size = 25

print high_pass_theta_peaks, low_pass_theta_peaks
high_pass_theta_peaks = (high_pass_theta_peaks + 90) % 360
low_pass_theta_peaks = (low_pass_theta_peaks + 90) % 360

high_pass_theta_peaks_low_range = (high_pass_theta_peaks - theta_region_size) * radians_conv
high_pass_theta_peaks_high_range = (high_pass_theta_peaks + theta_region_size) * radians_conv
low_pass_theta_peaks_low_range = (low_pass_theta_peaks - theta_region_size) * radians_conv
low_pass_theta_peaks_high_range = (low_pass_theta_peaks + theta_region_size) * radians_conv

# high_pass_theta_peaks_low_range *= radians_conv
# high_pass_theta_peaks_high_range *= radians_conv
# low_pass_theta_peaks_low_range *= radians_conv
# low_pass_theta_peaks_high_range *= radians_conv

um_conv = 6.5/60/2
radians_conv = np.pi/180.0
giant_df_finite = giant_df[np.isfinite(giant_df['del_theta'])]

ax1 = plt.subplot(211)
valid_del_theta = giant_df_finite.query('-2.29 < del_theta < 2.29')
bin_num = hnf.hist_bin_optimization_continuous(valid_del_theta['theta'])
print bin_num
theta_values = (valid_del_theta['theta'] + 90) % 360
plt.hist(theta_values*radians_conv, bins=50, normed=True)
plt.ylabel('PD')
plt.xlabel(r'$\theta$ (radians)')
x_label = [r"0", r"$\pi/\mathregular{4}$", r"$\pi/\mathregular{2}$", r"$3\pi/\mathregular{4}$", r"$\pi$",r"$5\pi/\mathregular{4}$", r"$\mathregular{3}\pi/\mathregular{2}$",r"$7\pi/\mathregular{4}$", r"2$\pi$"]
plt.xticks(np.array([0,0.25, 0.5,0.75, 1,1.25, 1.5,1.75, 2])*np.pi,x_label)
plt.xlim(0, 2*np.pi)

print high_pass_theta_peaks_low_range[0], high_pass_theta_peaks_high_range
ax1.axvspan(high_pass_theta_peaks_low_range[0],high_pass_theta_peaks_high_range[0], color='C3', alpha=0.5, zorder=0)
ax1.axvspan(high_pass_theta_peaks_low_range[1],high_pass_theta_peaks_high_range[1], color='C3', alpha=0.5, zorder=0)
ax1.axvspan(low_pass_theta_peaks_low_range[0],low_pass_theta_peaks_high_range[0], color='C4', alpha=0.5, zorder=0)
ax1.axvspan(low_pass_theta_peaks_low_range[1],low_pass_theta_peaks_high_range[1], color='C4', alpha=0.5, zorder=0)


ax2 = plt.subplot(212)
bin_num = 100
high_pass_pd, high_pass_bins  = np.histogram(high_pass_del_theta, bins=bin_num, normed=True)
low_pass_pd, low_pass_bins  = np.histogram(low_pass_del_theta, bins=bin_num, normed=True)

high_pass_logpd = -np.log(high_pass_pd)
low_pass_logpd = -np.log(low_pass_pd)

high_pass_bin_midpoints = (high_pass_bins[:-1] + high_pass_bins[1:])/2.0
low_pass_bin_midpoints = (low_pass_bins[:-1] + low_pass_bins[1:])/2.0

arg_min_high_pass = np.argmin(high_pass_logpd)

plt.plot(high_pass_bin_midpoints*radians_conv, high_pass_logpd - high_pass_logpd.min(), 'C3', label='High PD\n of passing')
plt.plot(low_pass_bin_midpoints*radians_conv, low_pass_logpd - low_pass_logpd.min(), 'C4', label='Low PD\n of passing')

plt.ylabel(r'pmf ($\mathregular{k_BT}$)')
plt.xlabel(r'$\Delta \theta$ (radians)')

plt.legend(loc='upper right', fancybox=False, frameon=False, handlelength=1, handletextpad=0.7)


mplhf.add_axes_label_inches(ax1, (0.068,0.065), 'a', fontsize=10)
mplhf.add_axes_label_inches(ax2, (0.068,0.065), 'b', fontsize=10)

plt.tight_layout(pad=0.1, h_pad=0.5)
[ 54 230] [146 336]
107
2.07694180987 [ 2.94960644  6.02138592]
In [93]:
save_dir = "C:\Users\Scherer Lab E\Box Sync\Passing\Figures and Data\Figures"
hist_passing_theta_del_theta.savefig(save_dir+"\Fig_7.png", dpi=600)
save_dir = "C:\Users\Scherer Lab E\Box Sync\Passing\Figures and Data\Figures"
hist_passing_theta_del_theta.savefig(save_dir+"\Fig_7.pdf", dpi=800)

Particle Non-passing and Passing Distribution

In [13]:
# # From Ana_17050203
# f = open("scatter_plots_giant_df.pkl", "r")
# giant_df = cPickle.load(f)
# f.close()

# From Ana_17051501
f = open("C:\Users\Scherer Lab E\Box Sync\Passing\Figures and Data\Data\\non_pass_event_del_r_theta.pkl", mode='r')
non_pass_del_r, non_pass_del_theta = cPickle.load(f)
f.close()

# From Ana_17050803
f = open("C:\Users\Scherer Lab E\Box Sync\Passing\Figures and Data\Data\pass_event_mean_path.pkl", mode='r')
path_above, path_below, path_theta, pass_del_theta_pos_neg, pass_del_r_pos_neg = cPickle.load(f)
f.close()
In [126]:
LogNorm()
Out[126]:
<matplotlib.colors.LogNorm at 0x37c93d68>
In [133]:
from matplotlib.colors import LogNorm

del_r_del_theta_fig = plt.figure(figsize=(3.34646, 4.5))

um_conv = 6.5/60/2
radians_conv = np.pi/180.0


ax1 = plt.subplot(211)
prob_density, xedges, yedges, im1 = plt.hist2d(non_pass_del_theta*radians_conv, non_pass_del_r*um_conv, bins=50, norm=LogNorm(), rasterized=True)
cbar = plt.colorbar(im1, ax=ax1)
cbar.set_label('PD')
plt.xlabel(r'$\Delta \theta$ (radians)')
plt.ylabel(r'$\Delta r$ ($\mathregular{\mu}$m)')


ax2 = plt.subplot(212)
path_theta_mid = (path_theta[:-1] + path_theta[1:])/2
prob_density, xedges, yedges, im2 = plt.hist2d(pd.concat(pass_del_theta_pos_neg)*radians_conv, pd.concat(pass_del_r_pos_neg)*um_conv, range=[[-.3491,.3491],[-1.0833,1.0833]], bins=50, norm=LogNorm(), rasterized=True)
cbar = plt.colorbar(im2, ax=ax2)
cbar.set_label('PD')
plt.plot(path_theta_mid*radians_conv, np.asarray(path_above)*um_conv, 'C3')
plt.plot(path_theta_mid*radians_conv, np.asarray(path_below)*um_conv, 'C3')
plt.xlabel(r'$\Delta \theta$ (radians)')
plt.ylabel(r'$\Delta r$ ($\mathregular{\mu}$m)')

# plt.ylabel('PD')
# plt.xlabel(r'$\theta$ (radians)')
# x_label = [r"0", r"$\pi/\mathregular{2}$", r"$\pi$", r"$\mathregular{3}\pi/\mathregular{2}$",   r"2$\pi$"]
# plt.xticks(np.array([0,0.5,1,1.5,2])*np.pi,x_label)
# plt.xlim(0, 2*np.pi)
mplhf.add_axes_label_inches(ax1, (0.068,0.065), 'a', color='white', fontsize=10)
mplhf.add_axes_label_inches(ax2, (0.068,0.065), 'b', color='k', fontsize=10, backgroundcolor='white')

plt.tight_layout(pad=0.1)
In [134]:
save_dir = "C:\Users\Scherer Lab E\Box Sync\Passing\Figures and Data\Figures"
del_r_del_theta_fig.savefig(save_dir+"\Fig_3.png", dpi=600)
save_dir = "C:\Users\Scherer Lab E\Box Sync\Passing\Figures and Data\Figures"
del_r_del_theta_fig.savefig(save_dir+"\Fig_3.pdf", dpi=800)

Passing Event Mean Path for Didfferent L's

In [16]:
# From Ana_17050803
f = open("C:\Users\Scherer Lab E\Box Sync\Passing\Figures and Data\Data\pass_event_mean_path_grouped_Ls.pkl", mode='r')
mean_path_grouped_Ls = cPickle.load(f)
f.close()

# From Ana_17050803
f = open("C:\Users\Scherer Lab E\Box Sync\Passing\Figures and Data\Data\pass_event_mean_path.pkl", mode='r')
path_above, path_below, path_theta, pass_del_theta_pos_neg, pass_del_r_pos_neg = cPickle.load(f)
f.close()
In [31]:
from matplotlib.colors import LogNorm

um_conv = 6.5/60/2
radians_conv = np.pi/180.0

mean_traj_fig = plt.figure(figsize=(3.34646, 2.5))

L_labels = ['1,2', '3,4', '5']
colors = ['C0', 'C1', 'C2']

for num, data in enumerate(mean_path_grouped_Ls[:-1]):
    print len(data)
    path_above = data[0]
    path_below = data[1]
    path_theta = data[2]
    theta_pos_neg = data[3]
    r_pos_neg = data[4]
    
    path_theta_mid = (path_theta[:-1] + path_theta[1:])/2
    #prob_density, xedges, yedges, im2 = plt.hist2d(pd.concat(pass_del_theta_pos_neg)*radians_conv, pd.concat(pass_del_r_pos_neg)*um_conv, range=[[-.3491,.3491],[-1.0833,1.0833]], bins=50, norm=LogNorm(), rasterized=True)
    
    plt.plot(path_theta_mid*radians_conv, np.asarray(path_above)*um_conv, colors[num], label='$l$='+str(L_labels[num]))
    plt.plot(path_theta_mid*radians_conv, np.asarray(path_below)*um_conv, colors[num], label=None)
    plt.xlabel(r'$\Delta \theta$ (radians)')
    plt.ylabel(r'$\Delta r$ ($\mathregular{\mu}$m)')
    
    plt.xlim(-0.15, 0.15)
    plt.ylim(-0.6, 0.6)
    
    
plt.plot(pd.concat(pass_del_theta_pos_neg).values*radians_conv, pd.concat(pass_del_r_pos_neg).values*um_conv, 'ko', ms=0.5, alpha=0.07, zorder=0, rasterized=True)

ax_legend = plt.legend(loc='upper right', borderaxespad=0.1, handlelength=1, handletextpad=1)

# Make the legend rendered in Latex
ax_legend_text = ax_legend.get_texts()
for text_obj in ax_legend_text:
    text_obj.set_usetex(True)
plt.tight_layout(pad=0.1)
5
5
5
In [32]:
save_dir = "C:\Users\Scherer Lab E\Box Sync\Passing\Figures and Data\Figures"
mean_traj_fig.savefig(save_dir+"\Fig_5.png", dpi=600)
save_dir = "C:\Users\Scherer Lab E\Box Sync\Passing\Figures and Data\Figures"
mean_traj_fig.savefig(save_dir+"\Fig_5.pdf", dpi=400)

Passing Events per Second

In [94]:
# From Ana_17050702
f = open("C:\Users\Scherer Lab E\Box Sync\Passing\Figures and Data\Data\pass_events_per_sec_normed.pkl", mode='r')
Ls, normed_events_per_frame = cPickle.load(f)
f.close()

# From Ana_17050702
f = open("C:\Users\Scherer Lab E\Box Sync\Passing\Figures and Data\Data\pass_event_dwell_time.pkl", mode='r')
all_dwells = cPickle.load(f)
f.close()
In [95]:
pass_events_fig = plt.figure(figsize=(3.34646, 4))

events_per_sec = normed_events_per_frame * 110.0

# Cut out L=-5
events_per_sec = events_per_sec[Ls >= 0]
plot_Ls = Ls[Ls >= 0]

plot_events_per_sec = events_per_sec[events_per_sec < np.inf]
plot_Ls = plot_Ls[events_per_sec < np.inf]
# print events_per_sec
fit_func = lambda x, p0: x*p0

param, pcov = scipy.optimize.curve_fit(fit_func, plot_Ls, plot_events_per_sec)

ax2 = plt.subplot(212)
x_fit = np.linspace(0,5.1,100)
y_fit = fit_func(x_fit, param)
plt.plot(plot_Ls, plot_events_per_sec, 'o', ms=4)
plt.plot(x_fit, y_fit, 'k')

plt.ylabel('Event Rate ($\mathregular{sec}^{-1}$)')
plt.xlabel('Angular Number, $l$', usetex=True)

# Plot dwell times of passing for each L
single_exp = lambda x, p1,p2: p1*np.exp(-p2*x)
dwell_times = []
for idx in range(1,6):
    data = all_dwells[idx]
    
    
    # Histogram
    bins = hnf.hist_bin_optimization(data)
    hist, bins = np.histogram(data, bins=70)
    mid_bins = (bins[:-1] + bins[1:])/2.0
    d_t = 1 - np.cumsum(hist)/float(sum(hist))
    params, cov = scipy.optimize.curve_fit(single_exp, mid_bins, d_t, p0=[0.5,0.0095], maxfev=2000)
    
    fit_x = np.linspace(min(mid_bins)*0.90, max(mid_bins)*1.10, 300)
    fit_y = [single_exp(xp, params[0], params[1]) for xp in fit_x]
    
    dwell_times.append(params[1])
    
ax1 = plt.subplot(211)
dwell_times = np.asarray(dwell_times)
plt.plot(range(1,6), dwell_times*110.0, 'o')
plt.xlabel('Angular Number, $l$', usetex=True)
plt.ylabel('k($l$) (sec$^{-1}$)', usetex=True)
plt.ylim(0,7)

mplhf.add_axes_label_inches(ax1, (0.068,0.065), 'a', color='k', fontsize=10)
mplhf.add_axes_label_inches(ax2, (0.068,0.065), 'b', color='k', fontsize=10)

plt.tight_layout(pad=0.3, h_pad=0.1)
In [96]:
save_dir = "C:\Users\Scherer Lab E\Box Sync\Passing\Figures and Data\Figures"
pass_events_fig.savefig(save_dir+"\Fig_6.png", dpi=600)
save_dir = "C:\Users\Scherer Lab E\Box Sync\Passing\Figures and Data\Figures"
pass_events_fig.savefig(save_dir+"\Fig_6.pdf", dpi=800)

Optical Binding Potential

In [126]:
import cPickle

# From Ana_17050301
f = open("C:\Users\Scherer Lab E\Box Sync\Passing\Figures and Data\Data\optical_binding_potential.pkl", mode='r')
opt_bind = cPickle.load(f)
f.close()
In [129]:
def add_four_polar_coords(ax, size=None):
    """A helper function that adds 0pi, pi/2, pi, and 3pi/2 axis labels 
    on the inside of an axis following the unit circle.
    
    :param ax: A mpl.axes object you want to add polar labels to
    """
    if size == None:
        size = 'medium'
    # Add the polar labels
    ax.text(0.955, 0.5, '$\mathbf{\mathregular{0}}$', fontdict=dict(color='white', size=size),
         weight='extra bold', transform=ax.transAxes, va='center', ha='right')
    ax.text(0.5, 0.97, '$\mathbf{\pi/\mathregular{2}}$', fontdict=dict(color='white', size=size),
             weight='extra bold', transform=ax.transAxes, va='top', ha='center')
    ax.text(0.045, 0.5, '$\mathbf{\pi}$', fontdict=dict(color='white', size=size),
             weight='extra bold', transform=ax.transAxes, va='center', ha='left')
    ax.text(0.5, 0.03, '$\mathbf{\mathregular{3}\pi/\mathregular{2}}$', fontdict=dict(color='white', size=size),
             weight='extra bold', transform=ax.transAxes, va='bottom', ha='center')
    
    # Change ticks in graph
    xticklines = ax.get_xticklines()
    yticklines = ax.get_yticklines()
    
    xcenter = len(xticklines)/2
    ycenter = len(yticklines)/2
    
    xticklines[xcenter].set(color='white', markeredgewidth=2, markersize=5, zorder=0)
    xticklines[xcenter-1].set(color='white', markeredgewidth=2, markersize=5)
    yticklines[ycenter].set(color='white', markeredgewidth=2, markersize=5)
    yticklines[ycenter-1].set(color='white', markeredgewidth=2, markersize=5)
    
In [131]:
from mpl_toolkits.axes_grid1 import make_axes_locatable

opt_bind_fig = plt.figure(figsize=(3.34646, 2.2))

# Need to divide the optical binding by 1000 to finish computing the average
true_opt_bind = opt_bind/1000
true_opt_bind = np.pad(true_opt_bind, (100,100), 'constant', constant_values=0)

len_opt_bind = len(opt_bind[:,0])
x = 11.42 * np.arange(len_opt_bind)/1000
x = x - x[len_opt_bind//2]
y = 11.42 * np.arange(len_opt_bind)/1000
y = y - y[len_opt_bind//2]

#plt.pcolormesh(x, y, opt_bind, cmap='viridis_r')
ax = plt.subplot()
im = plt.imshow(true_opt_bind, cmap='viridis_r', extent=[x[0], x[-1], y[0], y[-1]], rasterized=True)
plt.xlabel(r'x ($\mathregular{\mu}$m)')
plt.ylabel(r'y ($\mathregular{\mu}$m)')
divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size="5%", pad=0.05)
cbar = plt.colorbar(im, cax=cax)
cbar.set_label(r'$\mathregular{k_B}$T')

add_four_polar_coords(ax)

plt.tight_layout(pad=0.1)
In [132]:
save_dir = "C:\Users\Scherer Lab E\Box Sync\Passing\Figures and Data\Figures"
opt_bind_fig.savefig(save_dir+"\Fig_4.png", dpi=600)
save_dir = "C:\Users\Scherer Lab E\Box Sync\Passing\Figures and Data\Figures"
opt_bind_fig.savefig(save_dir+"\Fig_4.pdf", dpi=800)
In [ ]: